C++制作“简单”小游戏

好久都没有更新这个系列的专栏了,我们来康康吧。

今天,我们用C++只做一个小游戏—2048小游戏。

或许,有人会说:这太没技术含量了,简直信手捏来!

那么,用easyx呢?

台下观众:

接下来,废话不多说,咱们直接先看一下项目截图:

 

然后代码伺候:

#include <cstdio>
#include <cstring>
#include <ctime>
#include <graphics.h>
#include <conio.h>
#include <cstdio>

using namespace std;

const COLORREF BGC = RGB(250, 248, 239);
int score, best, a[5][5], b[5][5];		
bool mov[5][5];							

void init()
{
	setbkcolor(BGC);
	setbkmode(TRANSPARENT);
	score = 0;
	memset(a, 0, sizeof(a));
	int x1 = rand() % 4 + 1, y1 = rand() % 4 + 1, x2 = rand() % 4 + 1, y2 = rand() % 4 + 1;	// 随机生成两个初始点
	a[x1][y1] = a[x2][y2] = 2;				
}


void drawmap()
{
	BeginBatchDraw();
	cleardevice();
	settextcolor(RGB(119, 110, 101));
	settextstyle(50, 0, L"微软雅黑")
  • 9
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
当然可以!用 C++ 制作小游戏代码是一项有趣的任务。这里我介绍一个简单的命令行扫雷游戏的代码实现思路: 1. 定义一个类 `MineSweeper`,包含以下属性和方法: 属性: - `board`:一个二维数组,表示扫雷棋盘上每个格子的状态。 - `rows` 和 `cols`:分别表示扫雷棋盘的行数和列数。 - `num_mines`:表示扫雷棋盘上地雷的数量。 方法: - `init_board`:初始化扫雷棋盘,将所有格子都设置为未开启状态(默认为 0),并随机放置地雷。 - `print_board`:打印扫雷棋盘的当前状态。 - `open_cell`:开启一个格子,如果该格子上是地雷,则游戏结束;否则,如果该格子周围没有地雷,则递归开启周围的格子。 - `play_game`:开始游戏,不断接收用户输入,并调用相应的方法进行处理,直到游戏结束。 2. 在 `main` 函数中创建一个 `MineSweeper` 对象,并调用其 `play_game` 方法开始游戏。 下面是一个简单的示例代码(仅供参考): ``` #include <iostream> #include <vector> #include <ctime> #include <cstdlib> using namespace std; class MineSweeper { public: MineSweeper(int r, int c, int m) : rows(r), cols(c), num_mines(m), board(rows, vector<int>(cols, 0)) { init_board(); } void init_board() { // 随机放置地雷 srand(time(NULL)); int count = 0; while (count < num_mines) { int r = rand() % rows; int c = rand() % cols; if (board[r][c] != -1) { board[r][c] = -1; count++; } } } void print_board() { cout << " "; for (int i = 0; i < cols; i++) { cout << " " << i; } cout << endl; for (int i = 0; i < rows; i++) { cout << i << " "; for (int j = 0; j < cols; j++) { if (board[i][j] == -1) { cout << "* "; } else if (board[i][j] == 0) { cout << "- "; } else { cout << board[i][j] << " "; } } cout << endl; } } void open_cell(int r, int c) { if (r < 0 || r >= rows || c < 0 || c >= cols || board[r][c] != 0) { return; } int count = 0; for (int i = max(0, r-1); i <= min(rows-1, r+1); i++) { for (int j = max(0, c-1); j <= min(cols-1, c+1); j++) { if (board[i][j] == -1) { count++; } } } if (count > 0) { board[r][c] = count; } else { board[r][c] = -2; for (int i = max(0, r-1); i <= min(rows-1, r+1); i++) { for (int j = max(0, c-1); j <= min(cols-1, c+1); j++) { open_cell(i, j); } } } } bool play_game() { print_board(); while (true) { int r, c; cout << "请输入要开启的格子的行号和列号,用空格分隔(例如:0 1):"; cin >> r >> c; if (board[r][c] == -1) { cout << "你踩到地雷了,游戏结束!" << endl; return false; } else { open_cell(r, c); print_board(); bool win = true; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (board[i][j] == 0) { win = false; break; } } } if (win) { cout << "恭喜你扫完了所有地雷,游戏胜利!" << endl; return true; } } } } private: int rows, cols, num_mines; vector<vector<int>> board; }; int main() { int rows = 10, cols = 10, num_mines = 10; MineSweeper game(rows, cols, num_mines); game.play_game(); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值